package classesBD;

import aplicacao.funcoes;
import java.sql.SQLException;
import java.util.logging.Level;
import java.util.logging.Logger;

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

/**
 *
 * @author Pessoal
 */
public class MeioPublicacao implements tabela {
  protected int idMeioP;
  protected Local localidade;
  protected int ano;
  protected int mes;
  protected String nome;
  protected String volume;

  public MeioPublicacao() {
    localidade = new Local("Indefinido","Indefinido");
  }

  


  @Override
  public int insere(boolean checaExistencia) {
    if (checaExistencia){
      idMeioP = existe(nome);
    }
    if (idMeioP == 0){
        try {
            String[] campos = new String[5];
            campos[0] = "default";
            campos[1] = Integer.toString(localidade.insere(true));  
            campos[2] = Integer.toString(ano);
            campos[3] = Integer.toString(mes);
            campos[4] = nome;
            String query = funcoes.montaInsert("MEIOPUBLICACAO", campos);
            idMeioP = Conexao.executa(query, true);
            Conexao.fecha();
        } catch (SQLException ex) {
            Logger.getLogger(MeioPublicacao.class.getName()).log(Level.SEVERE, null, ex);
        }
    }  
    return idMeioP;
  }

  @Override
  public void buscaPorId(int id) {
    throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
  }

  @Override
  public void buscaPorNome(String nome) {
    throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
  }

  @Override
  public boolean preencheAttr(String attr, String valor) {
    String atributo = attr.toLowerCase();
    boolean result = true;
    switch(atributo){
      case "year":ano = Integer.parseInt(valor);
        break;
      case "month": mes = Integer.parseInt(valor);
        break;
      case "title":  
      case "journal":  nome = valor;
        break;
      case "volume": volume = valor;
        break;
      default: result = false;
    }
    return result;
  }

  @Override
  public String existe(int id) {
    String query = "SELECT nome FROM MEIOPUBLICACAO WHERE IDMEIOP=" + Integer.toString(id);
    String[][] retorno = Conexao.pesquisa(query, 1);
    if (retorno.length > 0){
      return retorno[0][0];
    }else{
      return "";
    }
  }

  @Override
  public int existe(String nome) {
    if (nome == null){
      return 0;
    }
    nome = nome.toLowerCase();
    String query = "SELECT IDMEIOP FROM MEIOPUBLICACAO WHERE LOWER(NOME)=" + funcoes.quotedStr(nome);
    String[][] retorno = Conexao.pesquisa(query, 1);
    if (retorno.length > 0){
      return Integer.parseInt(retorno[0][0]);
    }else{
      return 0;
    }
  }
 
  protected void atualiza(int id){
      try {
          String query = "UPDATE MEIOPUBLICACAO SET ";
          localidade.insere(true);
          query += " idLocal="+localidade.getIdLocal() + ",";
          if(ano != 0){
            query += " ano="+ano + ",";
          }
          if (mes != 0){
            query += " mes="+mes+ ",";
          }
          if(!funcoes.isNullOrEmpty(nome)){
            query += " nome="+funcoes.quotedStr(nome)+ ",";
          }
          if(!funcoes.isNullOrEmpty(volume)){
            query += " volume="+funcoes.quotedStr(volume)+ ",";
          }
          if(query.endsWith(",")){
            query = query.substring(0, query.length()-1);
          }
          query += " WHERE idMeioP = ";
          if (id != 0){
            query += id;
          }else{
            query += idMeioP;
          }
          Conexao.executa(query);
          Conexao.fecha();
      } catch (SQLException ex) {
          Logger.getLogger(MeioPublicacao.class.getName()).log(Level.SEVERE, null, ex);
      }
  }
  
}
